/**
 * 
 */
package com.huyi.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * 描述：	反射实现
 * @author shengli.hu
 * @since 1.8	
 * @version 1.0
 */
public class AppleDemo {

	
	private double price;

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}
	
	
	/**
	 * @throws Exception 
	 * 
	 */
	public static void main(String[] args) throws Exception {
		
		System.out.println("************正射实现***************");
		AppleDemo demo = new AppleDemo();
		demo.setPrice(3.56);
		System.out.println("setPrice方法执行成功...");
		System.out.println("getPrice方法执行成功，返回结果：" + demo.getPrice());
		
		System.out.println("-------------------------------------");
	
		System.out.println("************反射实现***************");
		// 初始化类
		Class<?> clazz = Class.forName("com.huyi.reflect.AppleDemo");
		// 获取公有无参构造方法（默认构造方法）
		Constructor<?> constructor = clazz.getConstructor();
		
		// 获取私有无参构造方法（默认构造方法）
		// Constructor<?> constructor1 = clazz.getDeclaredConstructor();
		
		// 创建对象
		Object obj = constructor.newInstance();
		// 创建set方法
		Method setPriceMethod = clazz.getMethod("setPrice", double.class);
		// 执行setPrice方法
		setPriceMethod.invoke(obj, 2.56);
		System.out.println("setPrice方法执行成功...");
		
		// 创建get方法
		Method getPriceMethod = clazz.getMethod("getPrice");
		Object ret = getPriceMethod.invoke(obj);
		System.out.println("getPrice方法执行成功，返回结果：" + ret.toString());
	}
	
	
}
